1
成績表現調查
DSAI2202Lab 8: Composing Data Operations

學術支援團隊需要一份 近期表現下滑的在學修讀記錄清單。請將每位學生與其本人於同一課程中較早前的表現進行比較。

確認規則

  1. 使用兩個時段: 較早 與 近期。每個時段各有兩項等權重的評核。
  2. 在比較平均值之前, 每個 時段均須至少有两個非 NULL 分數。
  3. 計算 decline_points = earlier_avg - recent_avg。
  4. 下滑達 15 分或以上即表示 須檢視。否則,符合條件的修讀記錄將標示為 無警示。
  5. 將 資料不足 獨立分類。零分屬於有效分數;NULL 或缺失記錄並不代表零分。

準備你的資料庫

在 pgAdmin 中開啟助教資料夾 lab8_setup.sql 內提供的 DSAI2202/lab8/ 並執行整個檔案。每次建立新連線時,請再次使用右側的連線設定。

此設定亦提供 performance_comparison,這是一個稱為檢視表的已儲存查詢。它將支援後續練習;它並非儲存評核結果的額外資料表。

✍️ 計算前先檢查
檢查 E01、E07、E08、E09 及 E24。判斷哪些在兩個時段均有足夠分數。解釋為何 E24 的零分比 E08 的 NULL 值提供更強的證據。
設定綱要
SET search_path TO lab8;
檢查列數
SET search_path TO lab8;

SELECT 'students' AS table_name, COUNT(*) AS row_count
FROM students
UNION ALL SELECT 'courses', COUNT(*) FROM courses
UNION ALL SELECT 'enrolments', COUNT(*) FROM enrolments
UNION ALL SELECT 'assessment_results', COUNT(*) FROM assessment_results
UNION ALL SELECT 'support_units', COUNT(*) FROM support_units
ORDER BY table_name;
檢查證據
SET search_path TO lab8;

SELECT e.enrolment_id, e.student_id, e.course_code,
       r.result_id, r.period, r.assessment_no, r.score
FROM enrolments AS e
JOIN assessment_results AS r
  ON r.enrolment_id = e.enrolment_id
WHERE e.enrolment_id IN ('E01', 'E07', 'E08', 'E09', 'E24')
ORDER BY e.enrolment_id, r.period, r.assessment_no;